package collection;

import java.util.ArrayList;

public class ArrayListDetail {

    public static void main(String[] args) {

        /*
            1)permits all elements ,including null, ArrayList可以加入null，并且多个
            2)ArrayList 是由数组来实现数据存储的
            3)ArrayList 基本等同于 Vector，除了 ArrayList 是线程不安全的
              在多线程情况下，不建议使用ArrayList
         */

        /*
            1)ArrayList中维护了一个Object类型的数组elementData
              transient Object[] elementData;//transient 表示瞬间，短暂的，表示该属性不会被序列化
            2)当创建 ArrayList对象时，如果使用的是无参构造器，则初始elementData容量是0
              第1次添加，则扩容elementData为10，如需再次扩容，则扩容elementData为1.5倍
            3)如果使用的是指定大小的构造器，则初始elementData容量为指定大小，如果需要扩容，则
              直接扩容 elementData为1.5倍

              可以debug以下代码验证
         */

        //使用无参构造器创建 ArrayList 对象
        ArrayList list = new ArrayList(8);
        //使用 for 给 list 集合添加 1~10 数据
        for (int i = 0; i <= 10; i++) {
            list.add(i);
        }
        //使用for 给list 集合添加 11-15数据
        for (int i = 11; i <= 15; i++) {
            list.add(i);
        }
        list.add(100);
        list.add(200);
        list.add(null);
    }
}
